package in.rob.client.widget;
import in.lib.Constants;
import in.lib.Constants.StreamList;
import in.lib.manager.UserManager;
import in.model.User;
import in.rob.client.R;
import java.util.List;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
public class ScrollWidgetSettingsActivity extends PreferenceActivity
{
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
private CharSequence[] usernames;
private List<String> ids;
private SharedPreferences realPrefs;
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getActionBar().setIcon(R.drawable.ic_launcher);
getActionBar().setDisplayHomeAsUpEnabled(true);
realPrefs = PreferenceManager.getDefaultSharedPreferences(this);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null)
{
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
// If they gave us an intent without the widget id, just bail.
if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
{
finish();
}
}
@Override protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
setupSimplePreferencesScreen();
}
@Override public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == android.R.id.home)
{
finish();
return true;
}
else if (item.getItemId() == R.id.menu_ok)
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
ScrollWidgetProvider.updateAppWidget(this, appWidgetManager, mAppWidgetId);
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.widget, menu);
return super.onCreateOptionsMenu(menu);
}
private void setupSimplePreferencesScreen()
{
addPreferencesFromResource(R.xml.scroller_prefs);
ListPreference p = (ListPreference)findPreference("scroller_user_id");
p.setKey(p.getKey() + "_" + mAppWidgetId);
ListPreference stream = (ListPreference)findPreference("scroller_stream_id");
stream.setKey(stream.getKey() + "_" + mAppWidgetId);
ListPreference theme = (ListPreference)findPreference("scroller_theme");
theme.setKey(theme.getKey() + "_" + mAppWidgetId);
setUserList(p);
setStreamList(stream);
setThemeList(theme);
}
public void setStreamList(ListPreference stream)
{
StreamList[] list = StreamList.values();
CharSequence[] labels = new CharSequence[list.length];
CharSequence[] ids = new CharSequence[list.length];
String set = realPrefs.getString(stream.getKey(), list[0].toString());
CharSequence selected = getString(list[0].getLabelRes());
for (int index = 0; index < list.length; index++)
{
labels[index] = getString(list[index].getLabelRes());
ids[index] = list[index].toString();
if (ids[index].equals(set))
{
selected = labels[index];
}
}
stream.setSummary(selected);
stream.setValue(set);
stream.setEntries(labels);
stream.setEntryValues(ids);
stream.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{
@Override public boolean onPreferenceChange(Preference preference, Object newValue)
{
ListPreference listPreference = (ListPreference)preference;
int index = listPreference.findIndexOfValue(newValue.toString());
preference.setSummary(((ListPreference)preference).getEntries()[index]);
return true;
}
});
}
public void setThemeList(ListPreference stream)
{
CharSequence[] labels = {"Light", "Dark"};
String set = realPrefs.getString(stream.getKey(), labels[0].toString());
CharSequence selected = set;
stream.setSummary(selected);
stream.setValue(set);
stream.setEntries(labels);
stream.setEntryValues(labels);
stream.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{
@Override public boolean onPreferenceChange(Preference preference, Object newValue)
{
ListPreference listPreference = (ListPreference)preference;
int index = listPreference.findIndexOfValue(newValue.toString());
preference.setSummary(((ListPreference)preference).getEntries()[index]);
return true;
}
});
}
public void setUserList(ListPreference p)
{
ids = UserManager.getLinkedUserIds(this);
usernames = new CharSequence[ids.size()];
String selectedUser = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE).getString(Constants.PREFS_SCROLL_WIDGET_USER_ID + mAppWidgetId, UserManager.getUserId());
String selected = "";
int index = 0;
for (String id : ids)
{
User u = User.loadUser(id);
usernames[index++] = "@" + u.getMentionName();
if (u.getId().equals(selectedUser))
{
selected = u.getMentionName();
}
}
p.setSummary("@" + selected);
p.setEntries(usernames);
p.setEntryValues(ids.toArray(new String[usernames.length]));
p.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{
@Override public boolean onPreferenceChange(Preference preference, Object newValue)
{
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
ListPreference listPreference = (ListPreference)preference;
int index = listPreference.findIndexOfValue(newValue.toString());
// Set the summary to reflect the new value.
preference.setSummary(index >= 0 ? usernames[index] : null);
getSharedPreferences(getPackageName(), Context.MODE_PRIVATE).edit().putString(Constants.PREFS_SCROLL_WIDGET_USER_ID + mAppWidgetId, ids.get(index)).apply();
return true;
}
});
}
}